<?php

class AgendaDAO {

    public $p = null;

    public function AgendaDAO() {
        $this->p = new Conexao();
    }

    public function cria($agenda) {
        try {
            $stmt = $this->p->prepare("INSERT INTO agenda (nome, email, telefone) VALUES (?, ?, ?)");
            $stmt->bindValue(1, $agenda->getNome());
            $stmt->bindValue(2, $agenda->getEmail());
            $stmt->bindValue(3, $agenda->getTelefone());
            $stmt->execute();
            
            $this->p = null;
            
        } catch (PDOException $ex) {
            echo "Erro: ".$ex->getMessage();
        }
    }

    public function atualiza($agenda, $condicao) {
        try {
            $stmt = $this->p->prepare("UPDATE agenda SET nome=?, email=?, telefone=? WHERE id=?");
            $this->p->beginTransaction();
            $stmt->bindValue(1, $agenda->getNome());
            $stmt->bindValue(2, $agenda->getEmail());
            $stmt->bindValue(3, $agenda->getTelefone());
            $stmt->bindValue(4, $condicao);
            // executo a query preparada
            $stmt->execute();
            $this->p->commit();
            // fecho a conexão
            $this->p = null;
        } catch (PDOException $ex) {
            echo "Erro: ".$ex->getMessage();
        }
    }

    // remove um registro
    public function deleta($id) {
        try {
            $num = $this->p->exec("DELETE FROM agenda WHERE id=$id");
            // caso seja execuado ele retorna o número de rows que foram afetadas.
            if ($num >= 1) {
                return $num;
            } else {
                return 0;
            }
            // caso ocorra um erro, retorna o erro;
        } catch (PDOException $ex) {
            echo "Erro: ".$ex->getMessage();
        }
    }

    public function lista($query=null) {
        try {
            if ($query == null) {
                $stmt = $this->p->query("SELECT * FROM agenda");
            } else {
                $stmt = $this->p->query($query);
            }
            $this->p = null;
            return $stmt;
        } catch (PDOException $ex) {
            echo "Erro: ".$ex->getMessage();
        }
    }

}
